package com.example.demo.Utils;


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;

/**
 * @author 17996
 */
public class TimeUtil {


    //数据库md5,使用数据库随机salt


    /**
     *
     * 获取现在的日期
     * @param str  格式："yyyy-MM-dd HH:mm:ss"
     * @return
     */
    public static String getDate(String str) {
        //	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        SimpleDateFormat df = new SimpleDateFormat(str);//设置日期格式
        String date = df.format(new Date());// new Date()为获取当前系统时间，也可使用当前时间戳

        return date;
    }

    /**
     * 获取当前时间戳  返回 秒
     * @return
     */
    public static long getTime() {
        long time = System.currentTimeMillis();
        String res = String.valueOf(time / 1000);
        long date = Long.parseLong(res);
        return date;
    }


    /**
     * 将时间转换为时间戳
     * @param s
     * @param str 传入的时间字符格式："yyyy-MM-dd HH:mm:ss"
     * @return
     */
    public static String dateToStamp(String s , String str) {
        // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        String res = "";
        if (!"".equals(s)) {
            try {
                res = String.valueOf(sdf.parse(s).getTime() / 1000);
            } catch (Exception e) {
                System.out.println("传入了null值");
            }
        } else {
            long time = System.currentTimeMillis();
            res = String.valueOf(time / 1000);
        }

        return res;
    }



    /**
     *  时间对象转成时间戳
     * @param date
     * @return
     */
    public static int dateToStampToInt2(Date date ) {
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //	DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        String res = sdf.format(date);
        int res1 = dateToStampToInt(res , "yyyy-MM-dd HH:mm:ss");

        return res1;

    }




    /**
     * 日期对象转成 日期字符
     * @param date
     * @param str   返回日期字符格式"yyyy-MM-dd"
     * @return
     */
    public static String dateToStampToString3(Date date , String str) {
        DateFormat sdf = new SimpleDateFormat(str);
        //	DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        String res = sdf.format(date);
        return res;

    }


    /**
     * 将时间转换为时间戳  返回秒
     * @param s
     * @param str  传入的时间格式"yyyy-MM-dd HH:mm"
     * @return
     */
    public static int dateToStampToInt(String s , String str) {
        //    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        String res = "";
        if (!"".equals(s)) {
            try {
                res = String.valueOf(sdf.parse(s).getTime() / 1000);
            } catch (Exception e) {
                System.out.println("传入了null值");
            }
        } else {
            long time = System.currentTimeMillis();
            res = String.valueOf(time / 1000);
        }

        int result = 0;
        if (res != null || res != "") {
            result = Integer.parseInt(res);
        }
        return result;
    }




    /**
     * 将时间转换为时间戳  返回秒
     * @param s
     * @param str  传入的时间格式"yyyy-MM-dd HH:mm"
     * @return
     */
    public static long dateToStampToLong(String s ,String str) {
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        String res = "";
        if (!"".equals(s)) {
            try {
                res = String.valueOf(sdf.parse(s).getTime() / 1000);
            } catch (Exception e) {
                System.out.println("传入了null值");
            }
        } else {
            long time = System.currentTimeMillis();
            res = String.valueOf(time / 1000);
        }

        long result = 0;
        if (res != null || res != "") {
            //  result = Integer.parseInt(res);


            result = Long.parseLong(res);
        }
        return result;
    }

    /**
     *
     * 将秒时间戳转换为时间
     * @param time
     * @param str  返回格式  "yyyy-MM-dd HH:mm"
     * @return
     */
    public static String stampToDate(long time  , String  str) {
        SimpleDateFormat format = new SimpleDateFormat(str);
        String times = format.format(new Date(time * 1000L));
//	    System.out.println("日期格式---->" + times);
        return times;

    }


    /**
     * 获取今天开始时间
     */
    public static Long getStartTime() {
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(Calendar.HOUR, 0);
        todayStart.set(Calendar.MINUTE, 0);
        todayStart.set(Calendar.SECOND, 0);
        todayStart.set(Calendar.MILLISECOND, 0);
        return todayStart.getTime().getTime();
    }

    /**
     * 获取今天结束时间
     */
    public static Long getEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.HOUR, 23);
        todayEnd.set(Calendar.MINUTE, 59);
        todayEnd.set(Calendar.SECOND, 59);
        todayEnd.set(Calendar.MILLISECOND, 999);
        return todayEnd.getTime().getTime();
    }


    /**
     * 获取每周的开始日期、结束日期
     * @param   周期  0本周，-1上周，-2上上周，1下周，2下下周；依次类推
     * @return  返回date[0]开始日期、date[1]结束日期
     */
    public static int[] getBeginAndEndOfTheWeek(Date date2) {
        //     DateTime dateTime = new DateTime();


        //   LocalDate date = new LocalDate(dateTime.plusWeeks(week));
        LocalDate date = new LocalDate(date2);

        date = date.dayOfWeek().withMinimumValue();
        Date beginDate = date.toDate();
        Date endDate = date.plusDays(7).toDate();

        int  beginDate1= dateToStampToInt2(beginDate);
        int  endDate1= dateToStampToInt2(endDate)-1;


/*        String beginDate1 = dateToStampToString(beginDate);
        String endDate1 = dateToStampToString(endDate);*/

        return new int[]{beginDate1, endDate1};
    }


    public static void main(String[] args) {

        Date date= new Date();

        int[] re = getBeginAndEndOfTheWeek(date);

        for(int i=0;i<re.length;i++){

            System.out.println(re[i]);
        }

    }
}
